Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/EnvironmentMetrics.kt 492afbde5c98f3efdcd367ab2f13ef3665fe7388 (492afbde) Text, 12.14 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.node.component

Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787org.meshtastic.core.common.util.MetricFormatter
Tff7b72import T7ee787org.meshtastic.core.common.util.NumberFormatter
Tff7b72import T7ee787org.meshtastic.core.model.Node
Tff7b72import T7ee787org.meshtastic.core.model.util.TELEMETRY_CHANNEL_COUNT
Tff7b72import T7ee787org.meshtastic.core.model.util.UnitConversions
Tff7b72import T7ee787org.meshtastic.core.model.util.UnitConversions.toTempString
Tff7b72import T7ee787org.meshtastic.core.model.util.adcVoltage
Tff7b72import T7ee787org.meshtastic.core.model.util.oneWireTemperature
Tff7b72import T7ee787org.meshtastic.core.model.util.toSmallDistanceString
Tff7b72import T7ee787org.meshtastic.core.model.util.toSpeedString
Tff7b72import T7ee787org.meshtastic.core.resources.Res
Tff7b72import T7ee787org.meshtastic.core.resources.adc_voltage
Tff7b72import T7ee787org.meshtastic.core.resources.current
Tff7b72import T7ee787org.meshtastic.core.resources.dew_point
Tff7b72import T7ee787org.meshtastic.core.resources.distance
Tff7b72import T7ee787org.meshtastic.core.resources.gas_resistance
Tff7b72import T7ee787org.meshtastic.core.resources.humidity
Tff7b72import T7ee787org.meshtastic.core.resources.iaq
Tff7b72import T7ee787org.meshtastic.core.resources.ic_dew_point
Tff7b72import T7ee787org.meshtastic.core.resources.ic_electric_bolt
Tff7b72import T7ee787org.meshtastic.core.resources.ic_radioactive
Tff7b72import T7ee787org.meshtastic.core.resources.ic_soil_moisture
Tff7b72import T7ee787org.meshtastic.core.resources.ic_soil_temperature
Tff7b72import T7ee787org.meshtastic.core.resources.lux
Tff7b72import T7ee787org.meshtastic.core.resources.one_wire_temperature
Tff7b72import T7ee787org.meshtastic.core.resources.pressure
Tff7b72import T7ee787org.meshtastic.core.resources.radiation
Tff7b72import T7ee787org.meshtastic.core.resources.soil_moisture
Tff7b72import T7ee787org.meshtastic.core.resources.soil_temperature
Tff7b72import T7ee787org.meshtastic.core.resources.temperature
Tff7b72import T7ee787org.meshtastic.core.resources.uv_lux
Tff7b72import T7ee787org.meshtastic.core.resources.voltage
Tff7b72import T7ee787org.meshtastic.core.resources.weight
Tff7b72import T7ee787org.meshtastic.core.resources.wind
Tff7b72import T7ee787org.meshtastic.core.ui.icon.AirQuality
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Altitude
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Humidity
Tff7b72import T7ee787org.meshtastic.core.ui.icon.LightMode
Tff7b72import T7ee787org.meshtastic.core.ui.icon.MeshtasticIcons
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Particulate
Tff7b72import T7ee787org.meshtastic.core.ui.icon.PowerSupply
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Pressure
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Temperature
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Voltage
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Weight
Tff7b72import T7ee787org.meshtastic.core.ui.icon.WindDirection
Tff7b72import T7ee787org.meshtastic.feature.node.model.DrawableMetricInfo
Tff7b72import T7ee787org.meshtastic.feature.node.model.VectorMetricInfo
Tff7b72import T7ee787org.meshtastic.proto.Config

T8b949e/**
* Displays environmental metrics for a node.
*
* Readings that come from one physical sensor, or that are derived from each other, are grouped into a shared vertical
* column (temperature with its dew point, voltage with current, soil temperature with soil moisture, visible with UV
* light) — see issue #4507. Every other reading is its own single-card column.
*/
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffCyclomaticComplexMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4)
Tf0883e@Composable
Tff7b72internal Tff7b72fun Td2a8ffEnvironmentMetricsTb4b4b4(
Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4,
Te6edf3displayUnitsTb4b4b4: Te6edf3ConfigTb4b4b4.Te6edf3DisplayConfigTb4b4b4.Te6edf3DisplayUnitsTb4b4b4,
Te6edf3isFahrenheitTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3groupsTb4b4b4: Te6edf3ListTff7b72<Te6edf3MetricGroupTff7b72> Tff7b72= Te6edf3buildList Tb4b4b4{
Te6edf3withTb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3environmentMetricsTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3temperatureCard Tff7b72=
Te6edf3temperature
Tff7b72?.Te6edf3takeUnless Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isNaNTb4b4b4(Tb4b4b4) Tb4b4b4}
Tff7b72?.Te6edf3let Tb4b4b4{
Te6edf3VectorMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3temperatureTb4b4b4,
Te6edf3value Tff7b72= Tffa657itTb4b4b4.Te6edf3toTempStringTb4b4b4(Te6edf3isFahrenheitTb4b4b4)Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3TemperatureTb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e// Dew point is computed from temperature and humidity, so it belongs under the temperature it came from.
Tff7b72val Te6edf3dewPointCard Tff7b72=
Te6edf3temperature
Tff7b72?.Te6edf3let Tb4b4b4{ Te6edf3temp Tff7b72-Tff7b72> Te6edf3relative_humidityTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3rh Tff7b72-Tff7b72> Te6edf3UnitConversionsTb4b4b4.Te6edf3calculateDewPointTb4b4b4(Te6edf3tempTb4b4b4, Te6edf3rhTb4b4b4) Tb4b4b4} Tb4b4b4}
Tff7b72?.Te6edf3takeUnless Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isNaNTb4b4b4(Tb4b4b4) Tb4b4b4}
Tff7b72?.Te6edf3let Tb4b4b4{
Te6edf3DrawableMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3dew_pointTb4b4b4,
Te6edf3value Tff7b72= Tffa657itTb4b4b4.Te6edf3toTempStringTb4b4b4(Te6edf3isFahrenheitTb4b4b4)Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3ResTb4b4b4.Te6edf3drawableTb4b4b4.Te6edf3ic_dew_pointTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3addTb4b4b4(Te6edf3listOfNotNullTb4b4b4(Te6edf3temperatureCardTb4b4b4, Te6edf3dewPointCardTb4b4b4)Tb4b4b4)
Te6edf3relative_humidityTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3rh Tff7b72-Tff7b72>
Te6edf3addTb4b4b4(
Te6edf3VectorMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3humidityTb4b4b4,
Te6edf3value Tff7b72= Ta5d6ff"Tffd700${Te6edf3NumberFormatterTb4b4b4.Te6edf3formatTb4b4b4(Te6edf3rhTb4b4b4, T79c0ff0Tb4b4b4)Tffd700}Ta5d6ff%Ta5d6ff"Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3HumidityTb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3asGroupTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3barometric_pressureTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3bp Tff7b72-Tff7b72>
Te6edf3addTb4b4b4(
Te6edf3VectorMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3pressureTb4b4b4,
Te6edf3value Tff7b72= Ta5d6ff"Tffd700${Te6edf3NumberFormatterTb4b4b4.Te6edf3formatTb4b4b4(Te6edf3bpTb4b4b4, T79c0ff0Tb4b4b4)Tffd700}Ta5d6ff hPaTa5d6ff"Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3PressureTb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3asGroupTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3gas_resistanceTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3gr Tff7b72-Tff7b72>
Te6edf3addTb4b4b4(
Te6edf3VectorMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3gas_resistanceTb4b4b4,
Te6edf3value Tff7b72= Ta5d6ff"Tffd700${Te6edf3NumberFormatterTb4b4b4.Te6edf3formatTb4b4b4(Te6edf3grTb4b4b4, T79c0ff0Tb4b4b4)Tffd700}Ta5d6ff MΩTa5d6ff"Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ParticulateTb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3asGroupTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e// Voltage and current describe the same supply, so they stack like a power channel does.
Te6edf3addTb4b4b4(
Te6edf3listOfNotNullTb4b4b4(
Te6edf3voltageTff7b72?.Te6edf3let Tb4b4b4{
Te6edf3VectorMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3voltageTb4b4b4,
Te6edf3value Tff7b72= Ta5d6ff"Tffd700${Te6edf3NumberFormatterTb4b4b4.Te6edf3formatTb4b4b4(Tffa657itTb4b4b4, T79c0ff2Tb4b4b4)Tffd700}Ta5d6ffVTa5d6ff"Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3VoltageTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3currentTff7b72?.Te6edf3let Tb4b4b4{
Te6edf3VectorMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3currentTb4b4b4,
Te6edf3value Tff7b72= Ta5d6ff"Tffd700${Te6edf3NumberFormatterTb4b4b4.Te6edf3formatTb4b4b4(Tffa657itTb4b4b4, T79c0ff1Tb4b4b4)Tffd700}Ta5d6ffmATa5d6ff"Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3PowerSupplyTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3iaqTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3i Tff7b72-Tff7b72>
Te6edf3addTb4b4b4(
Te6edf3VectorMetricInfoTb4b4b4(Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3iaqTb4b4b4, Te6edf3value Tff7b72= Te6edf3iTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3AirQualityTb4b4b4)
Tb4b4b4.Te6edf3asGroupTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3distanceTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3d Tff7b72-Tff7b72>
Te6edf3addTb4b4b4(
Te6edf3VectorMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3distanceTb4b4b4,
Te6edf3value Tff7b72= Te6edf3dTb4b4b4.Te6edf3toSmallDistanceStringTb4b4b4(Te6edf3displayUnitsTb4b4b4)Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3AltitudeTb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3asGroupTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e// Visible and UV illuminance are the same light sensor reported two ways.
Te6edf3addTb4b4b4(
Te6edf3listOfNotNullTb4b4b4(
Te6edf3luxTff7b72?.Te6edf3let Tb4b4b4{
Te6edf3VectorMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3luxTb4b4b4,
Te6edf3value Tff7b72= Ta5d6ff"Tffd700${Te6edf3NumberFormatterTb4b4b4.Te6edf3formatTb4b4b4(Tffa657itTb4b4b4, T79c0ff0Tb4b4b4)Tffd700}Ta5d6ff lxTa5d6ff"Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3LightModeTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3uv_luxTff7b72?.Te6edf3let Tb4b4b4{
Te6edf3VectorMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3uv_luxTb4b4b4,
Te6edf3value Tff7b72= Ta5d6ff"Tffd700${Te6edf3NumberFormatterTb4b4b4.Te6edf3formatTb4b4b4(Tffa657itTb4b4b4, T79c0ff0Tb4b4b4)Tffd700}Ta5d6ff lxTa5d6ff"Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3LightModeTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3wind_speedTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3ws Tff7b72-Tff7b72>
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72val Te6edf3normalizedBearing Tff7b72= Tb4b4b4(Tb4b4b4(Te6edf3wind_direction Tff7b72?: T79c0ff0Tb4b4b4) Tff7b72+ T79c0ff1T79c0ff8T79c0ff0Tb4b4b4) Tff7b72% T79c0ff3T79c0ff6T79c0ff0
Te6edf3addTb4b4b4(
Te6edf3VectorMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3windTb4b4b4,
Te6edf3value Tff7b72= Te6edf3wsTb4b4b4.Te6edf3toSpeedStringTb4b4b4(Te6edf3displayUnitsTb4b4b4)Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3WindDirectionTb4b4b4,
Te6edf3rotateIcon Tff7b72= Te6edf3normalizedBearingTb4b4b4.Te6edf3toFloatTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3asGroupTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3weightTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3w Tff7b72-Tff7b72>
Te6edf3addTb4b4b4(
Te6edf3VectorMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3weightTb4b4b4,
Te6edf3value Tff7b72=
Te6edf3MetricFormatterTb4b4b4.Te6edf3weightTb4b4b4(Te6edf3wTb4b4b4, Te6edf3displayUnits Tff7b72=Tff7b72= Te6edf3ConfigTb4b4b4.Te6edf3DisplayConfigTb4b4b4.Te6edf3DisplayUnitsTb4b4b4.Te6edf3IMPERIALTb4b4b4)Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3WeightTb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3asGroupTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e// Both soil readings come from the same probe.
Te6edf3addTb4b4b4(
Te6edf3listOfNotNullTb4b4b4(
Te6edf3soil_temperature
Tff7b72?.Te6edf3takeUnless Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isNaNTb4b4b4(Tb4b4b4) Tb4b4b4}
Tff7b72?.Te6edf3let Tb4b4b4{
Te6edf3DrawableMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3soil_temperatureTb4b4b4,
Te6edf3value Tff7b72= Tffa657itTb4b4b4.Te6edf3toTempStringTb4b4b4(Te6edf3isFahrenheitTb4b4b4)Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3ResTb4b4b4.Te6edf3drawableTb4b4b4.Te6edf3ic_soil_temperatureTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3soil_moistureTff7b72?.Te6edf3let Tb4b4b4{
Te6edf3DrawableMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3soil_moistureTb4b4b4,
Te6edf3value Tff7b72= Ta5d6ff"Tffd700$Te6edf3itTa5d6ff%Ta5d6ff"Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3ResTb4b4b4.Te6edf3drawableTb4b4b4.Te6edf3ic_soil_moistureTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3radiationTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3r Tff7b72-Tff7b72>
Te6edf3addTb4b4b4(
Te6edf3DrawableMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3radiationTb4b4b4,
Te6edf3value Tff7b72= Ta5d6ff"Tffd700${Te6edf3NumberFormatterTb4b4b4.Te6edf3formatTb4b4b4(Te6edf3rTb4b4b4, T79c0ff1Tb4b4b4)Tffd700}Ta5d6ff µR/hTa5d6ff"Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3ResTb4b4b4.Te6edf3drawableTb4b4b4.Te6edf3ic_radioactiveTb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3asGroupTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e// 1-Wire probes and ADC inputs are independent channels, so one card each. Absent channels are null; a
T8b949e// reported 0°C or 0 V is a real reading and stays visible.
Tff7b72for Tb4b4b4(Te6edf3channel Tff7b72in T79c0ff0 Te6edf3until Te6edf3TELEMETRY_CHANNEL_COUNTTb4b4b4) Tb4b4b4{
Te6edf3oneWireTemperatureTb4b4b4(Te6edf3channelTb4b4b4)
Tff7b72?.Te6edf3takeIf Tb4b4b4{ Tff7b72!Tffa657itTb4b4b4.Te6edf3isNaNTb4b4b4(Tb4b4b4) Tb4b4b4}
Tff7b72?.Te6edf3let Tb4b4b4{ Te6edf3temp Tff7b72-Tff7b72>
Te6edf3addTb4b4b4(
Te6edf3DrawableMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3one_wire_temperatureTb4b4b4,
Te6edf3value Tff7b72= Te6edf3tempTb4b4b4.Te6edf3toTempStringTb4b4b4(Te6edf3isFahrenheitTb4b4b4)Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3ResTb4b4b4.Te6edf3drawableTb4b4b4.Te6edf3ic_soil_temperatureTb4b4b4,
Te6edf3channelNumber Tff7b72= Te6edf3channel Tff7b72+ T79c0ff1Tb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3asGroupTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72for Tb4b4b4(Te6edf3channel Tff7b72in T79c0ff0 Te6edf3until Te6edf3TELEMETRY_CHANNEL_COUNTTb4b4b4) Tb4b4b4{
Te6edf3adcVoltageTb4b4b4(Te6edf3channelTb4b4b4)
Tff7b72?.Te6edf3takeIf Tb4b4b4{ Tff7b72!Tffa657itTb4b4b4.Te6edf3isNaNTb4b4b4(Tb4b4b4) Tb4b4b4}
Tff7b72?.Te6edf3let Tb4b4b4{ Te6edf3volts Tff7b72-Tff7b72>
Te6edf3addTb4b4b4(
Te6edf3DrawableMetricInfoTb4b4b4(
Te6edf3label Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3adc_voltageTb4b4b4,
Te6edf3value Tff7b72= Te6edf3MetricFormatterTb4b4b4.Te6edf3voltageTb4b4b4(Te6edf3voltsTb4b4b4)Tb4b4b4,
Te6edf3icon Tff7b72= Te6edf3ResTb4b4b4.Te6edf3drawableTb4b4b4.Te6edf3ic_electric_boltTb4b4b4,
Te6edf3channelNumber Tff7b72= Te6edf3channel Tff7b72+ T79c0ff1Tb4b4b4,
Tb4b4b4)
Tb4b4b4.Te6edf3asGroupTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Te6edf3MetricCardFlowTb4b4b4(Te6edf3groups Tff7b72= Te6edf3groupsTb4b4b4)
Tb4b4b4}

Served by rngit 1.4.2 - Generated in 0.08s